import axios from 'axios'
import { useUserStore } from '@/stores/user' // 引入用户状态管理
import ErrorHandler from '@/utils/errorHandler' // 引入错误处理工具
import router from '@/router' // 引入路由

const http = axios.create({
  baseURL: '/api',
  timeout: 10000,
  headers: {
    "Content-Type": "application/json;charset=utf-8",
  },
  withCredentials: true,
})

// 请求拦截器：自动附加 Token
http.interceptors.request.use(
  (config) => {
    const userStore = useUserStore()
    if (userStore.token) {
      config.headers.Authorization = `Bearer ${userStore.token}`
    }
    return config
  },
  (error) => {
    // 请求错误处理
    console.error('请求错误:', error);
    ErrorHandler.handleHttpError(error);
    return Promise.reject(error)
  }
)

// 响应拦截器：统一处理错误
http.interceptors.response.use(
  (response) => {
    console.log('API响应:', response.config.url, response.data);
    
    // 检查业务逻辑错误 (API返回成功但业务状态码表示失败)
    // 例如：{ code: 500, message: "操作失败" }
    if (response.data && response.data.code && response.data.code !== 200) {
      console.warn('⚠️ API返回非200状态:', response.config.url, 'code:', response.data.code);
      
      // 处理不同的业务错误码
      if (response.data.code === 401) {
        const url = response.config.url;
        
        // ⚠️ 广告相关API的401不触发登出（可能是没有广告数据）
        if (url.includes('/advertisement') || url.includes('/popup')) {
          console.warn('⚠️ 广告API 401，忽略:', url);
          return response; // 返回响应，让业务代码处理
        }
        
        // 处理未授权
        console.error('❌ 401错误，清除登录状态:', url);
        const userStore = useUserStore();
        userStore.logout();
        // 使用路由替换而不是直接修改 location
        router.replace('/');
        return Promise.reject(response.data);
      } else if (response.data.code === 201) {
        // 密码错误等业务错误，直接返回响应让业务代码处理
        return response;
      } else {
        // 其他业务错误
        console.error('其他业务错误:', response.config.url, response.data);
        ErrorHandler.handleApiError(response.data);
        return Promise.reject(response.data);
      }
    }
    
    return response;
  },
  (error) => {
    // HTTP错误处理
    if (error.response) {
      const status = error.response.status;
      const url = error.config?.url || '';
      
      // 处理特定HTTP状态码
      if (status === 401) {
        // ⚠️ 只有API接口401才清除登录状态，静态资源401不处理
        if (url.startsWith('/profile/') || url.startsWith('/images/') || url.includes('.jpg') || url.includes('.png')) {
          console.warn('⚠️ 静态资源401，忽略:', url);
          return Promise.reject(error);
        }
        
        // 处理未授权
        console.error('❌ API 401错误，清除登录状态:', url);
        const userStore = useUserStore();
        userStore.logout();
        // 使用路由替换而不是直接修改 location
        router.replace('/');
        
        return Promise.reject(ErrorHandler.handleAuthError({
          message: '登录已过期，请重新登录'
        }));
      } 
      // 其他HTTP错误由ErrorHandler处理
      ErrorHandler.handleHttpError(error);
    } else {
      // 网络错误或请求被取消
      ErrorHandler.handleHttpError(error);
    }
    
    return Promise.reject(error);
  }
);

export default http